<?php namespace system\model;

use hdphp\Model\Model;

class Article extends Model{

	//数据表
	protected $table = "article";

	//完整表名
	protected $full = false;

	//自动验证
	protected $validate=[
		//['字段名','验证方法','提示信息',验证条件,验证时间]
		['title','required','文章标题不能为空',3,3],
		['author','required','文章作者不能为空',3,3],
		['category_cid','required','文章分类不能为空',3,3],
		['thumb','required','请上传图片',3,3],
		['digest','required','文章摘要不能为空',3,3],
		// ['keywords','required','文章关键字不能为空',3,3],
		// ['des','required','文章描述不能为空',3,3],
	];

	//自动完成
	protected $auto=[
		 // ['addtime','strtotime','function',2,1]
		//['字段名','处理方法','方法类型',验证条件,验证时机]
		['sendtime','time','function',3,1],
		['updatetime','time','function',3,2],
		['user_uid','getUserId','method',3,3],
	];

	//自动过滤
    protected $filter=[
        //[表单字段名,过滤条件,处理时间]
    ];

	//时间操作,需要表中存在created_at,update_at字段
	protected $timestamps=false;


	//禁止插入的字段
	protected $denyInsertFields = [];

	//禁止更新的字段
	protected $denyUpdateFields = [];

	//前置方法 比如: _before_add 为添加前执行的方法
	protected function _before_add(){}
	protected function _before_delete(){}
	protected function _before_save(&$data){}

	protected function _after_add(){}
	protected function _after_delete(){}
	protected function _after_save(){}

	// 获得user_uid的方法
	public function getUserId(){
		return	$_SESSION['admin']['uid'];
	}


	/**
	 * 创建获得数据getAll方法
	 */
	public function getAll($row,$isRecycle=0){
		// echo 3;die;
		//获取不在回收站的文章数量
		$count=$this->where('is_recycle',$isRecycle)->count();
		//获得分页
		$page=Page::row($row)->make($count);
		//每页数据
		//Page::limit()-->limit(0,10),不知道Page::limit()，打印到页面
		//$data = $this->where('is_recycle',1)->limit(Page::limit())->get();
		//为了在页面显示所属分类，将上面的语句修改为文章表与分类表进行关联
		$data=$this->join('category','Category_cid','=','cid')->
					where('is_recycle',$isRecycle)->limit(Page::limit())->get();
		// 将结果返回
		return ['page'=>$page,'data'=>$data];
	}


	/**
	 * 文章添加方法
	 */

	public function  store(){
		// 一表一添加一验证
		// p($_POST);die;
		// 1.1对文章表先进行验证
		if(!$this->create()) return false;
		// 2.1得先创建Article_data模型
		// 2.2执行文章数据表验证
		$arcDataModel= new Article_data();
		// p($cateDataModel);die;
		if(!$arcDataModel->create()){
			// $cateDataModel的错误信息不能直接输出
			// 需要将错误存到当前的模型error属性中
			// 才能被article控制器接收
			$this->error=$arcDataModel->getError();
			return false;
		}
		// 3.1执行文章标签标的验证
		if(!isset($_POST['tag_tid'])){
				$this->error='请填写标签';
				return false;
		}
		// 1.2执行文章表添加
		// p($this->data['tag_tid']);die;
		// insertGetId(如果数据表有自动递增的ID，可以使用insertGetId添加数据并返回该ID
		$aid=$this->insertGetId($this->data);
		// p($aid);die;
		// 2.3执行文章数据表添加
		$arcDataModel->data['article_aid']=$aid;
		// p($cateDataModel->data);die;
		// 2.4将获得的数据写入数据库
		$arcDataModel->insert($arcDataModel->data);
		// 3.执行文章标签中间表添加
		// 3.2实例化文章标签表  得先创建文章标签表的模型
		$arcTagModel=new article_tag();
		// 3.3执行文章标签表添加
			foreach ($this->data['tag_tid'] as  $tid) {
				$data=[
					'article_aid'=>$aid,
					'tag_tid'=>$tid,
				];
				// p($data);die;
				$arcTagModel->insert($data);
			}
		return true;
	}

	/**
	 * 文章编辑方法
	 */
	public function edit(){
		// echo 2;die;
		// 一表一添加一验证
		// p($_POST);
		// 1.1对文章表先进行验证
		if(!$this->create()) return false;
		// 2.1得先创建Article_data模型
		// 2.2执行文章数据表验证
		$arcDataModel=(new Article_data());
		// p($arcDataModel);die;
			// $cateDataModel的错误信息不能直接输出
			// 需要将错误存到当前的模型error属性中
			// 才能被article控制器接收
			if (!$arcDataModel->create()) {
				$this->error=$arcDataModel->getError();
				return false;
			}
		
		// 3.1执行文章标签标的验证
			if(!isset($_POST['tag_tid'])){
				$this->error='标签不能为空';
				return false;
			}
		// 1.2执行文章表更新数据
		// p($this->data);die;
		$this->where('aid',$this->data['aid'])->update($this->data);
		// echo 1;die;
		// p($this->data['tag_tid']);die;
		// insertGetId(如果数据表有自动递增的ID，可以使用insertGetId添加数据并返回该ID
		// p($aid);die;
		// 2.3执行文章数据表更新数据
		$arcDataModel->where('article_aid',$arcDataModel->data['aid'])->update($arcDataModel->data);
		// p($arcDataModel->data);die;
		// 3.执行文章标签中间表添加
			// 3.1将原来的数据先删除
			// 3.2实例化文章标签表
		$arcTagModel=(new article_tag());
		$arcTagModel->where('article_aid',$this->data['aid'])->delete();
		// 3.3执行文章标签表添加
		foreach ($this->data['tag_tid'] as $tid) {
				$data=[
				'article_aid'=>$this->data['aid'],
				'tag_tid'=>$tid,
				];
			}
		// 将结果返回
		return true;	
	}

	/**
	 * 删除方法
	 */
	public function  pack(){
		// 获得要恢复的当前id
		$aid=Q('get.aid',0,'intval');
		// p($aid);die;
		// 将当前文章这条数据彻底删除
		$this->where('aid',$aid)->delete();
		// message('已经彻底删除',U('index'),'success');
		// 将当前文章数据表这条数据彻底删除
		$arcDataModel=(new Article_data())->where('article_aid',$aid)->delete();
		// message('已经彻底删除',U('index'),'success');
		// 将当前文章标签表这条数据彻底删除
		$arcTagModel=(new article_tag())->where('article_aid',$aid)->delete();
		// message('已经彻底删除',U('index'),'success');
		return turn;
	}
}